executable and linkable format ne demek?
Executable and Linkable Format (ELF)
Executable and Linkable Format (ELF), yürütülebilir dosyalar, nesne kodu, paylaşımlı kütüphaneler ve çekirdek dökümleri için yaygın olarak kullanılan bir dosya formatıdır. Esneklik, genişletilebilirlik ve platformlar arası uyumluluk sunar. UNIX ve UNIX benzeri sistemlerde (Linux, BSD, Solaris) ve diğer işletim sistemlerinde standart dosya formatıdır.
ELF'in Temel Bileşenleri
ELF dosyası temel olarak şu bölümlerden oluşur:
- ELF Başlığı (ELF Header): Dosyanın en başında bulunur ve dosyanın türü (yürütülebilir, paylaşımlı kütüphane, nesne kodu vb.), mimarisi, giriş noktası adresi gibi temel bilgileri içerir. ELF Başlığı
- Program Başlığı Tablosu (Program Header Table): Yürütülebilir ve paylaşımlı kütüphaneler için önemlidir. Dosyanın belleğe nasıl yükleneceğini ve çalıştırılacağını tanımlayan segment bilgilerini içerir. Her bir segment, dosyanın bir bölümünü (örneğin, kod, veri) ve bellek üzerindeki özelliklerini (okunabilir, yazılabilir, yürütülebilir) belirtir. Program%20Başlığı%20Tablosu
- Bölüm Başlığı Tablosu (Section Header Table): Dosyadaki bölümleri (sections) tanımlar. Her bölüm, belirli bir veri türünü (örneğin, kod, veri, sembol tablosu, dize tablosu) içerir. Bölüm başlığı tablosu, her bölümün adını, boyutunu, adresini ve diğer özelliklerini belirtir. Bağlayıcılar (linkers) ve diğer araçlar tarafından kullanılır. Bölüm%20Başlığı%20Tablosu
- Bölümler (Sections): Dosyanın gerçek verilerini içerir. Örneğin:
.text
: Yürütülebilir kodu içerir.
.data
: Başlatılmış (initialized) verileri içerir.
.bss
: Başlatılmamış (uninitialized) verileri içerir (bellekte ayrılır, ancak dosya üzerinde yer kaplamaz).
.rodata
: Sadece okunabilir (read-only) verileri içerir.
.symtab
: Sembol tablosunu içerir.
.strtab
: Dize tablosunu içerir (sembol isimleri vb. için).
.rel.text
, .rel.data
: Yeniden konumlandırma (relocation) bilgilerini içerir.
- Sembol Tablosu (Symbol Table): Programdaki sembolleri (fonksiyonlar, değişkenler vb.) ve adreslerini içerir. Bağlayıcılar (linkers) tarafından sembol çözümlemesi (symbol resolution) için kullanılır. Sembol%20Tablosu
- Dize Tablosu (String Table): Sembol isimleri ve diğer metinsel verileri içerir. Dize%20Tablosu
- Yeniden Konumlandırma Girişleri (Relocation Entries): Bağlama işlemi sırasında adreslerin nasıl düzeltileceğini belirtir. Özellikle paylaşımlı kütüphaneler ve dinamik bağlama (dynamic linking) için önemlidir. Yeniden%20Konumlandırma%20Girişleri
ELF'in Avantajları
- Esneklik: Farklı mimariler ve işletim sistemleri tarafından desteklenir.
- Genişletilebilirlik: Yeni özellikler ve uzantılar eklemek kolaydır.
- Standart: Birçok araç ve kütüphane tarafından desteklenir.
- Dinamik Bağlama Desteği: Paylaşımlı kütüphanelerin kullanımını kolaylaştırır.
- Hızlı Yükleme: Program Başlığı Tablosu sayesinde dosyanın belleğe hızlı bir şekilde yüklenmesini sağlar.
ELF Dosya Türleri
- Yeniden Yerleştirilebilir Dosya (Relocatable File): Derleyici (compiler) tarafından oluşturulan, henüz bağlama işleminden geçmemiş nesne kodunu içerir.
.o
uzantısıyla bilinir.
- Yürütülebilir Dosya (Executable File): Çalıştırılmaya hazır, bağlama işleminden geçmiş programı içerir.
- Paylaşımlı Nesne Dosyası (Shared Object File): Dinamik olarak bağlanabilen paylaşımlı kütüphaneyi (shared library) içerir.
.so
uzantısıyla bilinir.
- Çekirdek Dökümü (Core Dump File): Bir programın çöktüğü andaki bellek görüntüsünü içerir. Hata ayıklama (debugging) için kullanılır.